#include "napi/native_api.h"
#include "varint.h"

EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports) {
    napi_property_descriptor desc[] = {
        {"varint_encode_typedarray", nullptr, varint_encode_typedarray, nullptr, nullptr, nullptr, napi_default,
         nullptr},
        {"varint64_encode_typedarray", nullptr, varint64_encode_typedarray, nullptr, nullptr, nullptr, napi_default,
         nullptr},
        {"varint_zigzag_encode_typedarray", nullptr, varint_zigzag_encode_typedarray, nullptr, nullptr, nullptr,
         napi_default, nullptr},
        {"varint64_zigzag_encode_typedarray", nullptr, varint64_zigzag_encode_typedarray, nullptr, nullptr, nullptr,
         napi_default, nullptr},
        {"varint_encode_array", nullptr, varint_encode_array, nullptr, nullptr, nullptr, napi_default, nullptr},
        {"varint64_encode_array", nullptr, varint64_encode_array, nullptr, nullptr, nullptr, napi_default, nullptr},
        {"varint_zigzag_encode_array", nullptr, varint_zigzag_encode_array, nullptr, nullptr, nullptr, napi_default,
         nullptr},
        {"varint64_zigzag_encode_array", nullptr, varint64_zigzag_encode_array, nullptr, nullptr, nullptr, napi_default,
         nullptr},
        {"varint_decode", nullptr, varint_decode_s, nullptr, nullptr, nullptr, napi_default, nullptr},
        {"varint_zigzag_decode", nullptr, varint_zigzag_decode, nullptr, nullptr, nullptr, napi_default, nullptr},
        {"varint64_decode", nullptr, varint64_decode, nullptr, nullptr, nullptr, napi_default, nullptr},
        {"varint64_zigzag_decode", nullptr, varint64_zigzag_decode, nullptr, nullptr, nullptr, napi_default, nullptr},
        {"varint64_get_bytes", nullptr, varint64_get_bytes, nullptr, nullptr, nullptr, napi_default, nullptr},
        {"varint64_zigzag_get_bytes", nullptr, varint64_zigzag_get_bytes, nullptr, nullptr, nullptr, napi_default,
         nullptr},
        {"varint_get_bytes", nullptr, varint_get_bytes, nullptr, nullptr, nullptr, napi_default, nullptr},
        {"varint_zigzag_get_bytes", nullptr, varint_zigzag_get_bytes, nullptr, nullptr, nullptr, napi_default, nullptr},
        {"varint_get_count", nullptr, varint_get_count, nullptr, nullptr, nullptr, napi_default, nullptr},
    };
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
    return exports;
}
EXTERN_C_END

static napi_module demoModule = {
    .nm_version = 1,
    .nm_flags = 0,
    .nm_filename = nullptr,
    .nm_register_func = Init,
    .nm_modname = "varint",
    .nm_priv = ((void *)0),
    .reserved = {0},
};

extern "C" __attribute__((constructor)) void RegisterVarintModule(void) { napi_module_register(&demoModule); }
